package com.cf.base.sp.engine;

import com.cf.base.sp.annotation.Level;

/**
 * 中心处理器
 *
 * @author yangji
 */
public interface Processor {

    /**
     * 保存数据
     *
     * @param key   数据 key
     * @param value 需保存的数据
     * @param level 保存级别
     * @param <T>   保存对象类型
     * @return 是否成功 没有绝对意义
     */
    <T> boolean put(String key, T value, Level level);

    /**
     * 获取数据
     *
     * @param key   获取数据 Key
     * @param level 数据存储级别
     * @param <T>   获取数据的类型
     * @return 返回保存时的期望对象
     */
    <T> T get(String key, Level level);

    /**
     * 获取该存储级别数据总条数
     *
     * @param level 数据存储级别
     * @return 返回条数
     */
    int count(Level level);

    /**
     * 查询数据是否存在
     *
     * @param key   获取数据key
     * @param level 需那个级别下面去查询
     * @return 是否存在
     */
    boolean contains(String key, Level level);

    /**
     * 删除数据
     *
     * @param key   数据 key
     * @param level 数据存储级别
     */
    void delete(String key, Level level);

    /**
     * 清空该级别下所有数据
     *
     * @param level 数据存储级别
     */
    void clear(Level level);

}
